package com.listener;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

import javax.servlet.http.HttpSession;

/**
 * 自定义一个 session 上下文工具类，可将生产的session 存储起来，
 * 
 * 用户登录过程中，是先创建了session ，然后才是用户的登录处理，
 * 所以要在创建session 的时候处理用户身份信息就无法实现了，
 * 将session 存储起来后，可以通过异步处理来实现，
 * 用户登录后，通过这个上下文获取到的session中就有了想要的信息 
 * 
 *
 */
public class MySessionContext {

	private static Map<String, HttpSession> sessionContext = new ConcurrentHashMap<String, HttpSession>();
	
	/**
	 * 将session添加至上下文中
	 * @param session
	 */
    public static void AddSession(HttpSession session) {
        if (session != null) {
            sessionContext.put(session.getId(), session);
        }
    }

    /**
     * 删除session
     * @param session
     */
    public static void DelSession(HttpSession session) {
    	
        if (session != null) {
            sessionContext.remove(session.getId());
        }
    }

    /**
     * 获取session
     * @param session_id
     * @return
     */
    public static HttpSession getSession(String session_id) {
        if (session_id == null)
        return null;
        return sessionContext.get(session_id);
    }
    
	/**
	 * 当前session 上下文中的session数
	 * @return
	 */
    public static int size(){
    	
    	return sessionContext.size();
    }

    /**
     * 获取 session id的集合
     * @return
     */
    public static List<String> getSessionIDList(){
    	
    	List<String> list = new ArrayList<String>(size());
    	
        for (Entry<String, HttpSession> entry : sessionContext.entrySet()) {
            String key = entry.getKey();
            if(null != key && !"".equals(key)){
            	
            	list.add(key);
            }
        }
        return list;
    }
    
}
